[SHADOW] Build p2m mapping according to m2p mapping.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 2 Aug 2006 08:58:06 +0000 (09:58 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 2 Aug 2006 08:58:06 +0000 (09:58 +0100)
Signed-off-by: Xin Li <xin.b.li@intel.com>
Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>
xen/arch/x86/shadow32.c
xen/arch/x86/shadow_public.c

index 8dece9d52a247bb1ec938b58251fa65f18659e1f..a2c82138c3221170d24785d4ea3ea9a49dea84f3 100644 (file)
@@ -990,18 +990,20 @@ alloc_p2m_table(struct domain *d)
 
     list_ent = d->page_list.next;
 
-    for ( gpfn = 0; list_ent != &d->page_list; gpfn++ )
+    while ( list_ent != &d->page_list )
     {
         page = list_entry(list_ent, struct page_info, list);
         mfn = page_to_mfn(page);
 
+        gpfn = get_gpfn_from_mfn(mfn);
+
         if ( !(error = map_p2m_entry(l1tab, gpfn, mfn)) )
         {
             domain_crash(d);
             break;
         }
 
-        list_ent = frame_table[mfn].list.next;
+        list_ent = page->list.next;
     }
 
     unmap_domain_page(l1tab);
index 44833b68bcb0050cfff8bb5d2bf28d7e47e9155e..9350aa6d72b6084af9582fe33993f8e1d4c2b5d7 100644 (file)
@@ -1617,20 +1617,22 @@ alloc_p2m_table(struct domain *d)
 
     list_ent = d->page_list.next;
 
-    for ( gpfn = 0; list_ent != &d->page_list; gpfn++ )
+    while ( list_ent != &d->page_list )
     {
         struct page_info *page;
 
         page = list_entry(list_ent, struct page_info, list);
         mfn = page_to_mfn(page);
 
+        gpfn = get_gpfn_from_mfn(mfn);
+
         if ( !(error = map_p2m_entry(top_tab, gpfn, mfn)) )
         {
             domain_crash(d);
             break;
         }
 
-        list_ent = frame_table[mfn].list.next;
+        list_ent = page->list.next;
     }
 
     unmap_domain_page(top_tab);